package com.sheep.structure;

/**
 * 栈
 * @author wangze
 * @date 2020-10-26 15:34.
 **/
public class MyArrayStack<E> {
	private final Object[] objects;

	/**
	 * stack大小
	 */
	private int size;

	/**
	 * stack大小容量
	 */
	private int capcity;

	public MyArrayStack(int capcity) {
		this.capcity = capcity;
		this.objects = new Object[capcity];
	}

	/**
	 * 入栈,从0索引处开始存放
	 *
	 * @param element 添加的元素
	 * @return 添加成功返回true，添加失败返回false
	 */
	public boolean push(E element) {
		if(this.size==this.capcity){
			return false;
		}
		this.objects[size++]=element;

		return true;

//		for (int i = 0; i < size; i++) {
//			if (objects[i] == null) {
//				objects[i] = element;
//				this.size++;
//				return true;
//			}
//		}
	}
	/**
	 * 出栈,从元素最大索引处开始出栈
	 *
	 * @return 返回出栈的元素或者返回null
	 */
	public E pop() {
		if(this.size==0){
			return  null;
		}
		E result=(E)objects[size-1];
		objects[size-1]=null;
		size--;
		return  result;

	}


	/**
	 * 获取栈顶元素，但不出栈
	 *
	 * @return 返回出栈的元素或者返回null
	 */
	public E peek() {
		//如果栈为空,则返回空
		if (size == 0) {
			return null;
		}
		//获取元素最大索引处的元素
		Object e = objects[size - 1];
		return (E) e;
	}


}
